package tools

import (
	"fmt"
	"io/fs"
	"io/ioutil"
	"os"
)

// 用于保存文件，判断文件是否存在，进行确认式保存
func WFile(filename string, data []byte, perm fs.FileMode) {
	var isBool string

	//判断文件是否存在
	_, err := os.Stat(filename)
	if err != nil && os.IsNotExist(err) {
		//存在
		//fmt.Println("文件不存在！", filename)
		err = ioutil.WriteFile(filename, data, perm)
		if err == nil {
			fmt.Println("文件已成功保存！", filename)
		}
	} else {
		fmt.Println("文件已存在，是否需要删除后保存，Y 删除后保存新镜像，N 跳过使用老文件！")

		fmt.Scanln(&isBool)
		if isBool == "Y" || isBool == "y" {
			os.Remove(filename)

			err = ioutil.WriteFile(filename, data, perm)
			if err != nil {
				fmt.Println("文件保存失败", filename)
			} else {
				fmt.Println("文件已成功保存！", filename)
			}
		} else {
			fmt.Println("已跳过，文件为", filename, "!")
		}
	}
}

// 判断文件夹是否存在
func PathExists(path string) (bool, error) {
	_, err := os.Stat(path)
	if err == nil {
		return true, nil
	}
	if os.IsNotExist(err) {
		return false, nil
	}
	return false, err
}

// 判断所给路径文件/文件夹是否存在
func Exists(path string) bool {
	_, err := os.Stat(path) //os.Stat获取文件信息
	if err != nil {
		if os.IsExist(err) {
			return true
		}
		return false
	}
	return true
}

// 判断所给路径是否为文件夹
func IsDir(path string) bool {
	s, err := os.Stat(path)
	if err != nil {
		return false
	}
	return s.IsDir()
}

// 判断所给路径是否为文件
func IsFile(path string) bool {
	return !IsDir(path)
}

// 目录不存在直接创建目录
func CreatePath(path string) {
	exist, err := PathExists(path)

	if err != nil {
		fmt.Printf("get dir error![%v]\n", err)
		return
	}

	if exist {
		fmt.Printf("has dir![%v]\n", path)
	} else {
		fmt.Printf("no dir![%v]\n", path)
		// 创建文件夹
		err := os.Mkdir(path, os.ModePerm)
		if err != nil {
			fmt.Printf("mkdir failed![%v]\n", err)
		} else {
			fmt.Printf("mkdir success!\n")
		}
	}
}
